package br.com.vertigo.sgci.entity;

// Generated 15/10/2008 18:19:42 by Hibernate Tools 3.2.2.GA

import static javax.persistence.GenerationType.IDENTITY;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.validator.Length;
import org.hibernate.validator.NotNull;

/**
 * Projeto generated by hbm2java
 */
@SuppressWarnings("serial")
@Entity
@Table(name = "projeto", catalog = "sgci_project")
public class Projeto implements java.io.Serializable {

	private Long idProjeto;
	private Usuario usuario;
	private Cliente cliente;
	private String nomeProjeto;
	private String nomeProjetoTransient;
	private double orcamentoMes;
	private int percAviso;
	private boolean isAtivo;
	private boolean isPermitidoDespesas;
	private Set<Rdv> rdvs = new HashSet<Rdv>(0);
	private Set<Voucher> vouchers = new HashSet<Voucher>(0);
	private Set<Projetotipoitem> projetotipoitems = new HashSet<Projetotipoitem>(0);

	public Projeto() {
	}

	public Projeto(Usuario usuario, Cliente cliente, String nomeProjeto, String nomeProjetoTransient,
			double orcamentoMes, int percAviso, boolean isAtivo, boolean isPermitidoDespesas) {
		this.usuario = usuario;
		this.cliente = cliente;
		this.nomeProjeto = nomeProjeto;
		this.nomeProjetoTransient = nomeProjetoTransient;
		this.orcamentoMes = orcamentoMes;
		this.percAviso = percAviso;
		this.isAtivo = isAtivo;
		this.isPermitidoDespesas = isPermitidoDespesas;
	}

	public Projeto(Usuario usuario, Cliente cliente, String nomeProjeto, String nomeProjetoTransient,
			double orcamentoMes, int percAviso, boolean isAtivo, boolean isPermitidoDespesas,
			Set<Rdv> rdvs, Set<Voucher> vouchers,
			Set<Projetotipoitem> projetotipoitems) {
		this.usuario = usuario;
		this.cliente = cliente;
		this.nomeProjeto = nomeProjeto;
		this.nomeProjetoTransient = nomeProjetoTransient;
		this.orcamentoMes = orcamentoMes;
		this.percAviso = percAviso;
		this.isAtivo = isAtivo;
		this.isPermitidoDespesas = isPermitidoDespesas;
		this.rdvs = rdvs;
		this.vouchers = vouchers;
		this.projetotipoitems = projetotipoitems;
	}

	@Id
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "ID_PROJETO", unique = true, nullable = false)
	public Long getIdProjeto() {
		return this.idProjeto;
	}

	public void setIdProjeto(Long idProjeto) {
		this.idProjeto = idProjeto;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ID_USUARIO", nullable = false)
	@NotNull
	public Usuario getUsuario() {
		return this.usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ID_CLIENTE", nullable = false)
	@NotNull
	public Cliente getCliente() {
		return this.cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	@Column(name = "NOME_PROJETO", nullable = false, length = 45)
	@NotNull
	@Length(max = 45)
	public String getNomeProjeto() {
		return this.nomeProjeto;
	}

	public void setNomeProjeto(String nomeProjeto) {
		this.nomeProjeto = nomeProjeto;
	}

	@Column(name = "ORCAMENTO_MES", nullable = false, precision = 22, scale = 0)
	@NotNull
	public double getOrcamentoMes() {
		return this.orcamentoMes;
	}

	public void setOrcamentoMes(double orcamentoMes) {
		this.orcamentoMes = orcamentoMes;
	}

	@Column(name = "PERC_AVISO", nullable = false, precision = 22, scale = 0)
	@NotNull
	public int getPercAviso() {
		return this.percAviso;
	}

	public void setPercAviso(int percAviso) {
		this.percAviso = percAviso;
	}

	@Column(name = "IS_ATIVO", nullable = false)
	@NotNull
	public boolean isIsAtivo() {
		return this.isAtivo;
	}

	public void setIsAtivo(boolean isAtivo) {
		this.isAtivo = isAtivo;
	}
	
	@Column(name = "IS_PERMITIDO_DESPESAS", nullable = false)
	@NotNull
	public boolean isPermitidoDespesas() {
		return this.isPermitidoDespesas;
	}

	public void setPermitidoDespesas(boolean isPermitidoDespesas) {
		this.isPermitidoDespesas = isPermitidoDespesas;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "projeto")
	public Set<Rdv> getRdvs() {
		return this.rdvs;
	}

	public void setRdvs(Set<Rdv> rdvs) {
		this.rdvs = rdvs;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "projeto")
	public Set<Voucher> getVouchers() {
		return this.vouchers;
	}

	public void setVouchers(Set<Voucher> vouchers) {
		this.vouchers = vouchers;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "projeto")
	public Set<Projetotipoitem> getProjetotipoitems() {
		return this.projetotipoitems;
	}

	public void setProjetotipoitems(Set<Projetotipoitem> projetotipoitems) {
		this.projetotipoitems = projetotipoitems;
	}

	@Transient
	public String getNomeProjetoTransient() {
		if(nomeProjetoTransient == null){
			nomeProjetoTransient = getNomeProjeto();
		}
		return nomeProjetoTransient;
	}

	public void setNomeProjetoTransient(String nomeProjetoTransient) {
		this.nomeProjetoTransient = nomeProjetoTransient;
	}

}
